package com.rgc.web;


import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.rgc.dao.EventoDao;
import com.rgc.dao.EventoJuegoDao;
import com.rgc.dao.JuegoDao;
import com.rgc.dao.PlataformaDao;
import com.rgc.dao.PublicacionDao;
import com.rgc.dao.RankingDao;
import com.rgc.dao.UsuarioDao;
import com.rgc.domain.Evento;
import com.rgc.domain.EventoJuego;
import com.rgc.domain.Juego;
import com.rgc.domain.JuegoTipo;
import com.rgc.domain.Publicacion;
import com.rgc.domain.Ranking;
import com.rgc.domain.Usuario;
import com.rgc.domain.form.FormJuego;
import com.rgc.domain.form.Propaganda;

@Controller
@RequestMapping(value="/ranking")
public class ControladorRanking {
	
	
	
    protected final Log logger = LogFactory.getLog(getClass());
    ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Module.xml");
    protected PublicacionDao publicacionDao = (PublicacionDao) context.getBean("publicacionDao");
    protected EventoDao eventoDao = (EventoDao) context.getBean("eventoDao");
    protected JuegoDao juegoDao = (JuegoDao) context.getBean("juegoDao");
    protected RankingDao rankingDao = (RankingDao) context.getBean("rankingDao");
    
 
    
    @ModelAttribute("formjuego")
    public FormJuego populateFormjuego() {
    	
    	return new FormJuego();
    }
   
    @RequestMapping(method = {RequestMethod.GET,RequestMethod.POST})
    public ModelAndView handleRequest(@ModelAttribute("formjuego")  FormJuego formjuego,HttpServletRequest request, HttpServletResponse response,HttpSession session)
            throws ServletException, IOException { 
    	logger.info("Ingresa al ranking");
        //String now = (new Date()).toString();
        ModelAndView view=new ModelAndView();
       
        view.setViewName("ranking");
        view.addObject("usuario",session.getAttribute("username") );
        
        
        List<Evento> eventos=eventoDao.listEvento();
        if(eventos.size()>0);	
			for(Evento evento:eventos)	
				evento.setPublicacion(publicacionDao.listEventoPublicacion(evento.getIdevento()));
		
			
			
			Map<String,String> listado = new LinkedHashMap<String,String>();
			List<Juego> juegos=juegoDao.listJuego();
					
			for(Juego juego : juegos)
				listado.put(juego.getIdjuego(), juego.getNombre());	
			
		view.addObject("listadojuegos",listado);	
		listado = new LinkedHashMap<String,String>();
		listado.put("1", " INDIVIDUAL ");
		listado.put("2", " EQUIPOS ");
		view.addObject("listadomodo",listado);
		int idjuego1;
		if(formjuego.getJuego1()==0)
			idjuego1=Integer.parseInt(juegos.get(0).getIdjuego());
		else
			idjuego1=formjuego.getJuego1();
			
	
		
		
		List<Ranking> rank1=rankingDao.getRankingTop(formjuego.getModo1(), ""+idjuego1);
		
		String nombrejuego1 = juegoDao.getJuego(""+idjuego1).getNombre();	

		view.addObject("nombrejuego1", nombrejuego1);

		view.addObject("eventos", eventos);
		view.addObject("rank1", rank1);

		if(formjuego.getModo1()==1)
			view.addObject("modotitulo", "Individual");
		
		if(formjuego.getModo1()==2)
			view.addObject("modotitulo", "Equipos");	
		
		
		view.addObject("eventoURL", "/evento/evento?id=");
		view.addObject("noticiaURL", "/noticias/noticia?id=");
        return view;
    }
   
    
   
    
}